

	知识点小结：
	
	1.！！！C 语言允许在程序的任意位置声明变量！！！也就是即时即用，你可以不需要将所有变量在函数开头就全部定义完。
	当然你也发现了，我写的程序都是遵循即时即用原则。
--------------------------------------------------------------------------------------------------------------------------------------------------
	2.局部变量：
		作用域：局部变量是在函数内部声明的变量，它们只能在声明它们的函数内部使用。

		生命周期：局部变量的生命周期从它们被声明的位置开始，直到函数执行结束。函数执行完毕后，局部变量占用的内存会被释放。

		初始化：局部变量在使用前需要显式初始化，否则它们的值是不确定的。
	
		举个例子哈,

		#include<stdio.h>

		void swap(int a,int b,int c);//定义了一个交换函数

		void swap(int a, int b,int c)
		{

			int tmp;
			tmp = c;
			c = a;
			a = b;
			b = tmp;
			printf("In swap,a = %d,b = %d,c = %d\n", a, b, c);
		}

		int main()
		{
			int c = 100;
			int a = 10, b = 100;
			printf("In main:a = %d,b = %d,c = %d\n", a, b, c);
			swap(a, b,c);
			printf("a = %d,b = %d,c = %d", a, b, c);
		}

		这里swap函数中的a,b,c，一旦出了swap函数，他们就无法进行修改,也就是他们的作用域就在swap函数中

--------------------------------------------------------------------------------------------------------------------------------------------------

	3.全局变量：
		
--------------------------------------------------------------------------------------------------------------------------------------------------

	4.当全局变量在调用之后才命名的话，就在调用区域使用extran这个字符,使用 extern 关键字对该变量名进行修饰。这样就相当于告诉编译器：这个变量我在后边定义了，你先别急着报错

--------------------------------------------------------------------------------------------------------------------------------------------------
	5.为什么不要使用大量的全局变量？
	因为大量使用全局变量会对程序结构产生不良的影响，而且可能导致程序中各个函数之间具有太多的数据联系（在模块化程序设计的指导下，我们应该尽量设计内聚性强，耦合性弱的模块。
	也就是要求你函数的功能要尽量单一，与其他函数的相互影响尽可能地少，而大量使用全局变量恰好背道而驰）

--------------------------------------------------------------------------------------------------------------------------------------------------

	6.在什么情况下变量 a 和变量 b 可以存放在同一个地址而里面的数据却允许不同？当变量 a 和变量 b 分别为两个函数的局部变量时，就可能出现上述情况
		#include <stdio.h>
		void func1(void);
		void func2(void);

		void func1(void)
		{
			int a = 520;

			printf("a is %d, add of a is %p\n", a, &a);
		}

		void func2(void)
		{
			int b = 880;

			printf("b is %d, add of b is %p\n", b, &b);
		}

		int main(void)
		{
			func1();
			func2();

			return 0;
		}



